export default {
	init(receiveHandler, clickHandler) {
		// 诱导用户打开通知消息
		this.setPermissions();

		uni.getPushClientId({
			success: res => {
				uni.setStorageSync('push-cid', res.cid)
			}
		})

		uni.onPushMessage((res) => {
			console.log('收到推送消息', res);
			const {
				data
			} = res
			if (res.type === 'receive') {
				// 创建通知栏消息,并监听到推送时显示
				if (receiveHandler) receiveHandler(data)
			} else if (res.type === 'click') {
				// click 点击状态栏的消息时,进行跳转页面
				if (clickHandler) clickHandler(data)
			}
		})
	},
	/**
	 * 设置手机通知权限
	 */
	setPermissions() {
		// #ifdef APP-PLUS
		// 判断是否再进行提示
		let enable = uni.getStorageSync('set-notification')
		if (!enable) {
			if (plus.os.name == 'Android') { // 判断是Android
				var main = plus.android.runtimeMainActivity();
				var pkName = main.getPackageName();
				var uid = main.getApplicationInfo().plusGetAttribute("uid");
				var NotificationManagerCompat = plus.android.importClass(
					"android.support.v4.app.NotificationManagerCompat");
				//android.support.v4升级为androidx
				if (NotificationManagerCompat == null) {
					NotificationManagerCompat = plus.android.importClass("androidx.core.app.NotificationManagerCompat");
				}
				var areNotificationsEnabled = NotificationManagerCompat.from(main).areNotificationsEnabled();
				// 未开通‘允许通知’权限，则弹窗提醒开通，并点击确认后，跳转到系统设置页面进行设置  
				if (!areNotificationsEnabled) {
					uni.$xl.showModal({
						title: "通知权限开启提醒",
						content: '您还没有开启通知权限，无法接受到消息通知，请前往设置！',
						showCancel: true,
						confirmVal: '去设置',
						confirmColor: '#ff8541',
						cancelVal: '取消',
					}).then(res => {
						var Intent = plus.android.importClass('android.content.Intent');
						var Build = plus.android.importClass("android.os.Build");
						//android 8.0引导  
						if (Build.VERSION.SDK_INT >= 26) {
							var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
							intent.putExtra('android.provider.extra.APP_PACKAGE', pkName);
						} else if (Build.VERSION.SDK_INT >= 21) { //android 5.0-7.0  
							var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
							intent.putExtra("app_package", pkName);
							intent.putExtra("app_uid", uid);
						} else { //(<21)其他--跳转到该应用管理的详情页  
							intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
							var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
							intent.setData(uri);
						}
						// 跳转到该应用的系统通知设置页  
						main.startActivity(intent);
					}).catch(res => {
						// 已经处理过，就不再弹窗了
						uni.setStorageSync('set-notification', true)
					})
				}
			} else if (plus.os.name == 'iOS') { // 判断是ISO
				var isOn = undefined;
				var types = 0;
				var app = plus.ios.invoke('UIApplication', 'sharedApplication');
				var settings = plus.ios.invoke(app, 'currentUserNotificationSettings');
				if (settings) {
					types = settings.plusGetAttribute('types');
					plus.ios.deleteObject(settings);
				} else {
					types = plus.ios.invoke(app, 'enabledRemoteNotificationTypes');
				}
				plus.ios.deleteObject(app);
				isOn = (0 != types);
				if (isOn == false) {
					uni.$xl.showModal({
						title: "通知权限开启提醒",
						content: '您还没有开启通知权限，无法接受到消息通知，请前往设置！',
						showCancel: true,
						confirmVal: '去设置',
						confirmColor: '#ff8541',
						cancelVal: '取消',
					}).then(res => {
						var app = plus.ios.invoke('UIApplication', 'sharedApplication');
						var setting = plus.ios.invoke('NSURL', 'URLWithString:', 'app-settings:');
						plus.ios.invoke(app, 'openURL:', setting);
						plus.ios.deleteObject(setting);
						plus.ios.deleteObject(app);
					}).catch(res => {
						// 已经处理过，就不再弹窗了
						uni.setStorageSync('set-notification', true)
					})
				}
			}
		}
		// #endif
	},
	getPushClientId() {
		return new Promise((resolve, reject) => {
			let cid = uni.getStorageSync('push-cid');
			if (cid) {
				resolve(cid);
			} else {
				uni.getPushClientId({
					success: res => {
						uni.setStorageSync('push-cid', res.cid);
						resolve(res.cid);
					},
					fail: err => {
						reject(err);
					}
				});
			}
		});
	}
}